home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / C / Applications / Moscow ML 1.42 / src / test / testty.sml < prev    next >
Encoding:
Text File  |  1997-08-18  |  1023 b   |  51 lines  |  [TEXT/R*ch]

  1. (* val it = fn : 'a -> (('a -> 'b) -> 'b) *)
  2.  
  3. fn x => let val g = (fn y => y x) in g end;
  4.  
  5. (* Type clash between (int -> 'a) and int *)
  6.  
  7. let
  8.   val f = fn x => let val y = x in y 5 end
  9. in
  10.   f 3
  11. end;
  12.  
  13. (* val g = fn : 'a list -> int *)
  14.  
  15. fun g [] = 1
  16.   | g (x::xs) = 1 + g(xs);
  17.  
  18. (* val h = fn : int list -> int *)
  19.  
  20. fun h [] = 1
  21.   | h (x::xs) = h(xs) + h [7,9];
  22.  
  23. (* Type clash between bool and int *)
  24.  
  25. fun k [] = 1
  26.   | k (x::xs) = 1 + k[7,9] + k[true];
  27.  
  28. (* Wrong binding level for explicit type variable 'aaa *)
  29.  
  30. (fn x => let val y : 'aaa = x in y y end) 5;
  31.  
  32. (* Explicit type variable 'z can't be unified with ('z -> 'z) *)
  33.  
  34. val x = (let val Id : 'z -> 'z = fn z => z in Id Id end,
  35.          fn z => z : 'z);
  36.  
  37. (* Type clash between bool and string *)
  38.  
  39. let
  40.   val f = fn {lab1=x, ...} => x
  41. in
  42.   (f {lab1=88, lab2="a"}, f {lab1=99, lab2=true})
  43. end;
  44.  
  45. (* Type clash between 'a and ('a -> 'b) *)
  46.  
  47. fun mcurry f k =
  48.   let fun mcurryAcc 0 xs = f(rev xs)
  49.         | mcurryAcc k xs = fn x => mcurryAcc (k-1) (x::xs)
  50.   in mcurryAcc k [] end;
  51.